#include <iostream>

class Base
{
public:
    virtual void show()
    {
        std::cout<<"Base";
    }
};

class Derivd:public Base
{
public:
    void show()
    {
    std::cout<<"dervd";
    }
};



int main()
{
    //静态转换,静态转换不能用于不同类型指针的转换
    //基础数据类型转换
    //可以用于void*和其他指针的转换
    //可以用于父子类指针的转换，不会进行转换的安全检查
    // int a=97;
    // char b=static_cast<char>(a);
    // int a=10;
    // int *p=&a;
    // void*p=static_cast<void*>(p);
    // std::cout<<b<<std::endl;
    Base*b=new Base;
    //Derivd*a=static_cast<Derivd*>(b);//向下转型不安全，子类内存大
    


    //动态转换
    //运行期检查 检查指针是否能够完成转换
    //如果不能转换 返回nullptr

    // Derivd*a=dynamic_cast<Derivd*>(b);

    // if(a==nullptr)
    // {
    //     std::cout<<"转换失败\n";
    // }
    

    //常量转换
    //const转为非const
    // const int a=10;
    // int *p=const_cast<int*>(&a);


    //重定义转换
    // int a=10;
    // int *p=&a;
    // reinterpret_cast<char*>(p);
    // std::cout<<*p<<std::endl;
    return 0;

}